﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using testy;

namespace generator
{
    public partial class Pytanie : UserControl
    {
        public Pytanie()
        {
            InitializeComponent();
            Control[] odpowiedzi = { odp1, odp2, odp3, odp4, odp5, odp6, odp7, odp8, odp9, odp10 };
            Control[] punkty = { pkt1, pkt2, pkt3, pkt4, pkt5, pkt6, pkt7, pkt8, pkt9, pkt10 };
            Control[] popr = { poprawna1, poprawna2, poprawna3, poprawna4, poprawna5, poprawna6, poprawna7, poprawna8, poprawna9, poprawna10 };
            Control[] labelo = { o1, o2, o3, o4, o5, o6, o7, o8, o9, o10 };
            Control[] pt = { pt1, pt2, pt3, pt4, pt5, pt6, pt7, pt8, pt9, pt10 };
            Control[] pop = { pop1, pop2, pop3, pop4, pop5, pop6, pop7, pop8, pop9, pop10 };
        }

        //Wlaściwości

        public string odpo1
        {
            get
            {
                return odp1.Text;
            }
        }

        public string odpo2
        {
            get
            {
                return odp2.Text;
            }
        }

        public string odpo3
        {
            get
            {
                return odp3.Text;
            }
        }

        public string odpo4
        {
            get
            {
                return odp4.Text;
            }
        }

        public string odpo5
        {
            get
            {
                return odp5.Text;
            }
        }

        public string odpo6
        {
            get
            {
                return odp6.Text;
            }
        }

        public string odpo7
        {
            get
            {
                return odp7.Text;
            }
        }

        public string odpo8
        {
            get
            {
                return odp8.Text;
            }
        }

        public string odpo9
        {
            get
            {
                return odp9.Text;
            }
        }

        public string odpo10
        {
            get
            {
                return odp10.Text;
            }
        }

        public bool popra1
        {
            get
            {
                return poprawna1.Checked;
            }
        }

        public bool popra2
        {
            get
            {
                return poprawna2.Checked;
            }
        }

        public bool popra3
        {
            get
            {
                return poprawna3.Checked;
            }
        }

        public bool popra4
        {
            get
            {
                return poprawna4.Checked;
            }
        }

        public bool popra5
        {
            get
            {
                return poprawna5.Checked;
            }
        }

        public bool popra6
        {
            get
            {
                return poprawna6.Checked;
            }
        }

        public bool popra7
        {
            get
            {
                return poprawna7.Checked;
            }
        }

        public bool popra8
        {
            get
            {
                return poprawna8.Checked;
            }
        }

        public bool popra9
        {
            get
            {
                return poprawna9.Checked;
            }
        }

        public bool popra10
        {
            get
            {
                return poprawna10.Checked;
            }
        }

        public double pktt1
        {
            get
            {
                return (double)pkt1.Value;
            }
        }

        public double pktt2
        {
            get
            {
                return (double)pkt2.Value;
            }
        }

        public double pktt3
        {
            get
            {
                return (double)pkt3.Value;
            }
        }

        public double pktt4
        {
            get
            {
                return (double)pkt4.Value;
            }
        }

        public double pktt5
        {
            get
            {
                return (double)pkt5.Value;
            }
        }

        public double pktt6
        {
            get
            {
                return (double)pkt6.Value;
            }
        }

        public double pktt7
        {
            get
            {
                return (double)pkt7.Value;
            }
        }

        public double pktt8
        {
            get
            {
                return (double)pkt8.Value;
            }
        }

        public double pktt9
        {
            get
            {
                return (double)pkt9.Value;
            }
        }

        public double pktt10
        {
            get
            {
                return (double)pkt10.Value;
            }
        }

        public bool properYes
        {
            get
            {
                return everyProperYes.Checked;
            }
            set
            {
                everyProperYes.Checked = value;
            }
        }

        public bool properNo
        {
            get
            {
                return everyProperNo.Checked;
            }
            set
            {
                everyProperNo.Checked = value;
            }
        }

        public int l_odp
        {
            get
            {
                return ile_odp.SelectedIndex + 1;
            }
            set
            {
                ile_odp.SelectedIndex = value - 1;
                ile_odp.Text = value.ToString();
            }
        }
        
        public int l_zaz
        {
            get
            {
                return ile_zaznaczyc.SelectedIndex + 1;
            }
            set
            {
                ile_zaznaczyc.SelectedIndex = value - 1;
            }
        }

        public string trPyt
        {
            get
            {
                return tresc_pytania.Text;
            }
            set
            {
                tresc_pytania.Text = value;
            }
        }

        public void Clear()
        {
            tresc_pytania.Text = "";
            everyProperNo.Checked = true;
            ile_odp.SelectedIndex = 2;
            ile_odp.Text = "3";
            odp1.Text = "";
            pkt1.Value = 0;
            poprawna1.Checked = false;
            odp2.Text = "";
            pkt2.Value = 0;
            poprawna2.Checked = false;
            odp3.Text = "";
            pkt3.Value = 0;
            poprawna3.Checked = false;
            odp4.Text = "";
            pkt4.Value = 0;
            poprawna4.Checked = false;
            odp5.Text = "";
            pkt5.Value = 0;
            poprawna5.Checked = false;
            odp6.Text = "";
            pkt6.Value = 0;
            poprawna6.Checked = false;
            odp7.Text = "";
            pkt7.Value = 0;
            poprawna7.Checked = false;
            odp8.Text = "";
            pkt8.Value = 0;
            poprawna8.Checked = false;
            odp9.Text = "";
            pkt9.Value = 0;
            poprawna9.Checked = false;
            odp10.Text = "";
            pkt10.Value = 0;
            poprawna10.Checked = false;
        }

        public void wypelnij(Question pyt)
        {
            TextBox[] odpow = { odp1, odp2, odp3, odp4, odp5, odp6, odp7, odp8, odp9, odp10 };
            NumericUpDown[] punkty = { pkt1, pkt2, pkt3, pkt4, pkt5, pkt6, pkt7, pkt8, pkt9, pkt10 };
            CheckBox[] popraw = { poprawna1, poprawna2, poprawna3, poprawna4, poprawna5, poprawna6, poprawna7, poprawna8, poprawna9, poprawna10 };
            this.tresc_pytania.Text = pyt.Content;
            this.ile_odp.SelectedIndex = pyt.Answers.Count - 1;
            this.ile_odp.Text = pyt.Answers.Count.ToString();
            this.ile_zaznaczyc.SelectedIndex = pyt.CheckedCount - 1;
            this.ile_zaznaczyc.Text = pyt.CheckedCount.ToString();
            if (pyt.EveryProper == true)
                this.everyProperYes.Checked = true;
            else
                this.everyProperNo.Checked = true;
            for (int i = 0; i < pyt.Answers.Count; i++)
            {
                odpow[i].Text = pyt.Answers.ElementAt(i).Content;
                punkty[i].Value = (decimal)pyt.Answers.ElementAt(i).Pt;
                popraw[i].Checked = pyt.Answers.ElementAt(i).IsProper;
            }
        }

        public bool czy_wypelnione(int liczbaOdp)
        {
            Control[] odpowiedzi = {odp1, odp2, odp3, odp4, odp5, odp6, odp7, odp8, odp9, odp10};
            if (tresc_pytania.Text == "")
            {
                czy_pola_wypelnione.SetError(tresc_pytania, "Proszę uzupełnić pytanie.");
                return false;
            }
            else
                czy_pola_wypelnione.SetError(tresc_pytania, "");
            for (int i = 0; i < liczbaOdp; i++)
            {
                if (odpowiedzi[i].Text == "")
                {
                    czy_pola_wypelnione.SetError(odpowiedzi[i], "Proszę uzupełnić odpowiedź.");
                    return false;
                }
                else
                    czy_pola_wypelnione.SetError(odpowiedzi[i], "");
            }
            return true;
        }

        private void ile_odp_SelectedIndexChanged(object sender, EventArgs e)
        {
            Control[] odpowiedzi = {odp1, odp2, odp3, odp4, odp5, odp6, odp7, odp8, odp9, odp10};
            Control[] punkty = { pkt1, pkt2, pkt3, pkt4, pkt5, pkt6, pkt7, pkt8, pkt9, pkt10 };
            Control[] popr = { poprawna1, poprawna2, poprawna3, poprawna4, poprawna5, poprawna6, poprawna7, poprawna8, poprawna9, poprawna10 };
            Control[] labelo = { o1, o2, o3, o4, o5, o6, o7, o8, o9, o10 };
            Control[] pt = { pt1, pt2, pt3, pt4, pt5, pt6, pt7, pt8, pt9, pt10 };
            Control[] pop = { pop1, pop2, pop3, pop4, pop5, pop6, pop7, pop8, pop9, pop10 };
            ile_zaznaczyc.Items.Clear();

            for (int i = 0; i < ile_odp.SelectedIndex + 1; i++)
            {
                this.Controls.Add(odpowiedzi[i]);
                this.Controls.Add(punkty[i]);
                this.Controls.Add(popr[i]);
                this.Controls.Add(labelo[i]);
                this.Controls.Add(pt[i]);
                this.Controls.Add(pop[i]);
                ile_zaznaczyc.Items.Add(i + 1);
            }
            for (int j = ile_odp.SelectedIndex + 1; j < 10; j++)
            {
                this.Controls.Remove(odpowiedzi[j]);
                this.Controls.Remove(punkty[j]);
                this.Controls.Remove(popr[j]);
                this.Controls.Remove(labelo[j]);
                this.Controls.Remove(pt[j]);
                this.Controls.Remove(pop[j]);
            }
            ile_zaznaczyc.SelectedIndex = 0;
            ile_zaznaczyc.Text = "1";
        }

        private void Pytanie_Load(object sender, EventArgs e)
        {
            ile_odp.SelectedIndex = 2;
            ile_odp.Text = "3";
            everyProperNo.Checked = true;
            Control[] odpowiedzi = { odp1, odp2, odp3, odp4, odp5, odp6, odp7, odp8, odp9, odp10 };
            Control[] punkty = { pkt1, pkt2, pkt3, pkt4, pkt5, pkt6, pkt7, pkt8, pkt9, pkt10 };
            Control[] popr = { poprawna1, poprawna2, poprawna3, poprawna4, poprawna5, poprawna6, poprawna7, poprawna8, poprawna9, poprawna10 };
            Control[] labelo = { o1, o2, o3, o4, o5, o6, o7, o8, o9, o10 };
            Control[] pt = { pt1, pt2, pt3, pt4, pt5, pt6, pt7, pt8, pt9, pt10 };
            Control[] pop = { pop1, pop2, pop3, pop4, pop5, pop6, pop7, pop8, pop9, pop10 };
            for(int i = 3; i < 10; i++)
            {
                this.Controls.Remove(odpowiedzi[i]);
                this.Controls.Remove(punkty[i]);
                this.Controls.Remove(popr[i]);
                this.Controls.Remove(labelo[i]);
                this.Controls.Remove(pop[i]);
                this.Controls.Remove(pt[i]);
            }
        }

        private void tresc_pytania_TextChanged(object sender, EventArgs e)
        {
            if(tresc_pytania.Text != "")
                czy_pola_wypelnione.SetError(tresc_pytania, "");
        }

        private void odp1_TextChanged(object sender, EventArgs e)
        {
            if (odp1.Text != "")
                czy_pola_wypelnione.SetError(odp1, "");
        }

        private void odp2_TextChanged(object sender, EventArgs e)
        {
            if (odp2.Text != "")
                czy_pola_wypelnione.SetError(odp2, "");
        }

        private void odp3_TextChanged(object sender, EventArgs e)
        {
            if (odp3.Text != "")
                czy_pola_wypelnione.SetError(odp3, "");
        }

        private void odp4_TextChanged(object sender, EventArgs e)
        {
            if (odp4.Text != "")
                czy_pola_wypelnione.SetError(odp4, "");
        }

        private void odp5_TextChanged(object sender, EventArgs e)
        {
            if (odp5.Text != "")
                czy_pola_wypelnione.SetError(odp5, "");
        }

        private void odp6_TextChanged(object sender, EventArgs e)
        {
            if (odp6.Text != "")
                czy_pola_wypelnione.SetError(odp6, "");
        }

        private void odp7_TextChanged(object sender, EventArgs e)
        {
            if (odp7.Text != "")
                czy_pola_wypelnione.SetError(odp7, "");
        }

        private void odp8_TextChanged(object sender, EventArgs e)
        {
            if (odp8.Text != "")
                czy_pola_wypelnione.SetError(odp8, "");
        }

        private void odp9_TextChanged(object sender, EventArgs e)
        {
            if (odp9.Text != "")
                czy_pola_wypelnione.SetError(odp9, "");
        }

        private void odp10_TextChanged(object sender, EventArgs e)
        {
            if (odp10.Text != "")
                czy_pola_wypelnione.SetError(odp10, "");
        }
    }
}
